home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 46
/
Aminet 46 (2001)(GTI - Schatztruhe)[!][Dec 2001].iso
/
Aminet
/
text
/
edit
/
edt10src.lha
/
txt
/
EArgs.mod
< prev
next >
Wrap
Text File
|
1995-04-08
|
3KB
|
151 lines
(*
.name EArgs
.task Argument/Tooltype parsing
.release 1.0
.language Oberon-2
.translator Amiga Oberon 3.11
.system AmigaOS 2.04/2.1/3.0
.author Joachim Barheine
.address Hochgrevestraße 3, D-38640 Goslar
.copyright (c) 1994 by Joachim Barheine
*)
(* .info: 30/04/94, 14:19:58, version 11 *)
MODULE EArgs;
IMPORT
Exec,
Dos,
Icon,
K:= Kernel,
OLib:= OberonLib,
Util:= Utility,
Wb:= Workbench;
CONST
template = "FROM/M,WITH/K,PUBSCREEN/K";
(* $IF M2Amiga THEN *)
defEdtName = "M2Edt";
(* $ELSE *)
defEdtName = "Edt";
(* $END *)
VAR
old, currDir: Dos.FileLockPtr;
wbMsg: Wb.WBStartupPtr;
rdArgs: Dos.RDArgsPtr;
args : STRUCT (dummy: Dos.ArgsStruct)
from: Dos.ArgStringArray;
startup: Dos.ArgString;
pubScreen: Dos.ArgString;
END;
from- : ARRAY 256 OF Exec.STRPTR;
pubScreen- : Exec.STRING; (* name of public screen *)
startup- : Exec.STRING; (* name of startup file *)
edt- : Exec.STRING; (* filename of Edt *)
numArgs- : INTEGER;
PROCEDURE WBGetFilename* (VAR filename: ARRAY OF CHAR; dir: Dos.FileLockPtr; name: Exec.LSTRPTR): BOOLEAN;
VAR
oldCurr, lock: Dos.FileLockPtr;
(* $CopyArrays- *)
BEGIN
oldCurr:= Dos.CurrentDir(dir);
lock:= Dos.Lock(name^, Dos.sharedLock);
IF lock # NIL THEN
IF ~Dos.NameFromLock(lock, filename, LEN(filename)) THEN
filename:= "";
END;
Dos.UnLock(lock);
END;
dir:= Dos.CurrentDir(oldCurr);
RETURN filename # "";
END WBGetFilename;
PROCEDURE WBParseArgs;
VAR
i, fi: INTEGER;
diskObj: Wb.DiskObjectPtr;
s: Exec.LSTRPTR;
BEGIN
fi:= 0;
FOR i:= 1 TO SHORT(wbMsg.numArgs) - 1 DO
NEW(from[fi]);
IF WBGetFilename(from[fi]^, wbMsg.argList[i].lock, wbMsg.argList[i].name) THEN
INC(fi);
ELSE
DISPOSE(from[fi]);
END;
END;
from[fi]:= NIL;
numArgs:= fi;
diskObj:= Icon.GetDiskObject(edt);
IF diskObj # NIL THEN
s:= Icon.FindToolType(diskObj.toolTypes, "PUBSCREEN");
IF s # NIL THEN COPY(s^, pubScreen) END;
s:= Icon.FindToolType(diskObj.toolTypes, "WITH");
IF s # NIL THEN COPY(s^, startup) END;
Icon.FreeDiskObject(diskObj);
END;
END WBParseArgs;
PROCEDURE CLIParseArgs;
VAR
i, fi: INTEGER;
lock: Dos.FileLockPtr;
BEGIN
i:= 0; fi:= 0;
IF args.from # NIL THEN
REPEAT
lock:= Dos.Lock(args.from[i]^, Dos.sharedLock);
IF lock # NIL THEN
NEW(from[fi]);
IF Dos.NameFromLock(lock, from[fi]^, SIZE(from[fi]^)) THEN
INC(fi);
ELSE
DISPOSE(from[fi]);
END;
Dos.UnLock(lock);
END;
INC(i);
UNTIL args.from[i] = NIL;
END;
from[fi]:= NIL;
numArgs:= fi;
IF args.pubScreen # NIL THEN COPY(args.pubScreen^, pubScreen) END;
IF args.startup # NIL THEN COPY(args.startup^, startup) END;
END CLIParseArgs;
BEGIN
old:= NIL;
rdArgs:= NIL;
numArgs:= 0;
from[0]:= NIL;
startup:= "";
pubScreen:= "";
IF OLib.wbStarted THEN
wbMsg:= OLib.wbenchMsg;
currDir:= wbMsg.argList[0].lock;
old:= Dos.CurrentDir(currDir);
IF ~WBGetFilename(edt, currDir, wbMsg.argList[0].name) THEN edt:= defEdtName END;
WBParseArgs;
ELSE
IF ~Dos.GetProgramName(edt, SIZE(edt)) THEN edt:= defEdtName END;
rdArgs:= Dos.ReadArgs(template, args, NIL);
IF rdArgs # NIL THEN
CLIParseArgs;
Dos.FreeArgs(rdArgs);
END;
END;
CLOSE
IF old # NIL THEN currDir:= Dos.CurrentDir(old) END;
END EArgs.